home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-9.10-netbook-remix-PL.iso / casper / filesystem.squashfs / usr / lib / python2.6 / hotshot / log.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-11-11  |  5.4 KB  |  197 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import _hotshot
  5. import os.path as os
  6. import parser
  7. import symbol
  8. from _hotshot import WHAT_ENTER, WHAT_EXIT, WHAT_LINENO, WHAT_DEFINE_FILE, WHAT_DEFINE_FUNC, WHAT_ADD_INFO
  9. __all__ = [
  10.     'LogReader',
  11.     'ENTER',
  12.     'EXIT',
  13.     'LINE']
  14. ENTER = WHAT_ENTER
  15. EXIT = WHAT_EXIT
  16. LINE = WHAT_LINENO
  17.  
  18. class LogReader:
  19.     
  20.     def __init__(self, logfn):
  21.         self._filemap = { }
  22.         self._funcmap = { }
  23.         self._reader = _hotshot.logreader(logfn)
  24.         self._nextitem = self._reader.next
  25.         self._info = self._reader.info
  26.         if self._info.has_key('current-directory'):
  27.             self.cwd = self._info['current-directory']
  28.         else:
  29.             self.cwd = None
  30.         self._stack = []
  31.         self._append = self._stack.append
  32.         self._pop = self._stack.pop
  33.  
  34.     
  35.     def close(self):
  36.         self._reader.close()
  37.  
  38.     
  39.     def fileno(self):
  40.         """Return the file descriptor of the log reader's log file."""
  41.         return self._reader.fileno()
  42.  
  43.     
  44.     def addinfo(self, key, value):
  45.         '''This method is called for each additional ADD_INFO record.
  46.  
  47.         This can be overridden by applications that want to receive
  48.         these events.  The default implementation does not need to be
  49.         called by alternate implementations.
  50.  
  51.         The initial set of ADD_INFO records do not pass through this
  52.         mechanism; this is only needed to receive notification when
  53.         new values are added.  Subclasses can inspect self._info after
  54.         calling LogReader.__init__().
  55.         '''
  56.         pass
  57.  
  58.     
  59.     def get_filename(self, fileno):
  60.         
  61.         try:
  62.             return self._filemap[fileno]
  63.         except KeyError:
  64.             raise ValueError, 'unknown fileno'
  65.  
  66.  
  67.     
  68.     def get_filenames(self):
  69.         return self._filemap.values()
  70.  
  71.     
  72.     def get_fileno(self, filename):
  73.         filename = os.path.normcase(os.path.normpath(filename))
  74.         for fileno, name in self._filemap.items():
  75.             if name == filename:
  76.                 return fileno
  77.         
  78.         raise ValueError, 'unknown filename'
  79.  
  80.     
  81.     def get_funcname(self, fileno, lineno):
  82.         
  83.         try:
  84.             return self._funcmap[(fileno, lineno)]
  85.         except KeyError:
  86.             raise ValueError, 'unknown function location'
  87.  
  88.  
  89.     
  90.     def next(self, index = 0):
  91.         while None:
  92.             (what, tdelta, fileno, lineno) = self._nextitem()
  93.             if what == WHAT_ENTER:
  94.                 (filename, funcname) = self._decode_location(fileno, lineno)
  95.                 t = (filename, lineno, funcname)
  96.                 self._append(t)
  97.                 return (what, t, tdelta)
  98.             if what == WHAT_EXIT:
  99.                 return (what, self._pop(), tdelta)
  100.             if what == WHAT_LINENO:
  101.                 (filename, firstlineno, funcname) = self._stack[-1]
  102.                 return (what, (filename, lineno, funcname), tdelta)
  103.             if what == WHAT_DEFINE_FILE:
  104.                 filename = os.path.normcase(os.path.normpath(tdelta))
  105.                 self._filemap[fileno] = filename
  106.                 continue
  107.             if what == WHAT_DEFINE_FUNC:
  108.                 filename = self._filemap[fileno]
  109.                 self._funcmap[(fileno, lineno)] = (filename, tdelta)
  110.                 continue
  111.             what == WHAT_EXIT
  112.             if what == WHAT_ADD_INFO:
  113.                 if tdelta == 'current-directory':
  114.                     self.cwd = lineno
  115.                 
  116.                 self.addinfo(tdelta, lineno)
  117.                 continue
  118.             raise ValueError, 'unknown event type'
  119.             continue
  120.             return None
  121.  
  122.     
  123.     def __iter__(self):
  124.         return self
  125.  
  126.     
  127.     def _decode_location(self, fileno, lineno):
  128.         
  129.         try:
  130.             return self._funcmap[(fileno, lineno)]
  131.         except KeyError:
  132.             if self._loadfile(fileno):
  133.                 filename = None
  134.                 funcname = None
  135.             
  136.             
  137.             try:
  138.                 (filename, funcname) = self._funcmap[(fileno, lineno)]
  139.             except KeyError:
  140.                 filename = self._filemap.get(fileno)
  141.                 funcname = None
  142.                 self._funcmap[(fileno, lineno)] = (filename, funcname)
  143.             except:
  144.                 None<EXCEPTION MATCH>KeyError
  145.             
  146.  
  147.             None<EXCEPTION MATCH>KeyError
  148.  
  149.         return (filename, funcname)
  150.  
  151.     
  152.     def _loadfile(self, fileno):
  153.         
  154.         try:
  155.             filename = self._filemap[fileno]
  156.         except KeyError:
  157.             print 'Could not identify fileId', fileno
  158.             return 1
  159.  
  160.         if filename is None:
  161.             return 1
  162.         absname = os.path.normcase(os.path.join(self.cwd, filename))
  163.         
  164.         try:
  165.             fp = open(absname)
  166.         except IOError:
  167.             filename is None
  168.             filename is None
  169.             return None
  170.  
  171.         st = parser.suite(fp.read())
  172.         fp.close()
  173.         funcdef = symbol.funcdef
  174.         lambdef = symbol.lambdef
  175.         stack = [
  176.             st.totuple(1)]
  177.         while stack:
  178.             tree = stack.pop()
  179.             
  180.             try:
  181.                 sym = tree[0]
  182.             except (IndexError, TypeError):
  183.                 filename is None
  184.                 filename is None
  185.                 continue
  186.             except:
  187.                 filename is None
  188.  
  189.             if sym == funcdef:
  190.                 self._funcmap[(fileno, tree[2][2])] = (filename, tree[2][1])
  191.             elif sym == lambdef:
  192.                 self._funcmap[(fileno, tree[1][2])] = (filename, '<lambda>')
  193.             
  194.             stack.extend(list(tree[1:]))
  195.  
  196.  
  197.